#include"ListNode.h"



LTN* BuySListNode(Value x)//申请一个节点
{
    LTN *NewNode=(LTN *)malloc(sizeof(LTN));
    NewNode->data=x;
    NewNode->next=NULL;
    return NewNode;
}
int ListNodeEmpty(LTN **phead)//判空
{
   if(*phead==NULL)
    return 1;
   else
    return 0;
}
void ListNodeDestroy(LTN **phead)//销毁
{
    assert(phead);
    LTN *cur=*phead;

    while(cur)
    {
      LTN *Next=cur->next;
      free(cur);
      cur=Next;
    }
}
void ListNodePushBack(LTN **phead,int num)//尾插
{
    assert(phead);
    LTN*cur=*phead;
    if(ListNodeEmpty(phead)==1)
    {
        cur=BuySListNode(num);
        *phead=cur;

    }
    else
    {
        while(cur->next)
        {
            cur=cur->next;
        }
        LTN* Newhead=BuySListNode(num);
        cur->next=Newhead;
    }
}
void ListNodePopBack(LTN **phead)//尾删
{
 assert(phead);

    if(ListNodeEmpty(phead)==1)//链表为空
    {
        exit(-1);
    }
    LTN *cur=*phead;
    while(cur->next->next)
    {
        cur=cur->next;
    }
    free(cur->next);
    cur->next=NULL;
}
void ListNodePushFront(LTN **phead,int num)//头插
{

    assert(phead);

    if(ListNodeEmpty(phead)==1)//链表为空
    {
        *phead=BuySListNode(num);
    }
    else//不为空
    {
        LTN *OldHead=  *phead;
        LTN *newnode=BuySListNode(num);
        *phead=newnode;
        (*phead)->next=OldHead;
    }
}
void ListNodePopFront(LTN **phead)//头删
{
    if(ListNodeEmpty(phead)==1)//链表为空
    {
        exit(-1);
    }
    LTN* OldHead=*phead;
    LTN*Newhead=OldHead->next;
    free(OldHead);
    *phead=Newhead;
}
LTN* ListNodeFind(LTN **phead,int find)//查找
{

    LTN *cur=*phead;
    while(cur)
    {
        if(cur->data==find)
        {
            return cur;
        }
        cur=cur->next;
    }
    return NULL;
}

void ListNotPushInsert(LTN*find,int num)//pos插入
{
    LTN*next=find->next;
    LTN *newnode=BuySListNode(num);
    find->next=newnode;
    newnode->next=next;
}


void ListNotPopInsert(LTN*find,int num)//pos后删除
{
    LTN *Next=find->next;
    if(find->next!=NULL)
    {
        LTN *Nextnext=Next->next;
        free(Next);
        find->next=Nextnext;
    }
    else
    {
        exit(-1);
    }
}
